package com.weic.easycache.framework.biz;

import java.util.Map;

import com.weic.easycache.framework.json.JsonBase;

/**与网络Api相关的业务逻辑**/
public interface IApiBiz<R> extends IBiz<R> {

	/**数据过期之后，是否允许后台更新数据（后台更新会等到所有任务都执行完毕之后再在本线程中执行）
	 * 还是直接等待更新（任务队列里面，如果后面还有任务，若等所有任务执行完毕之后再次更新本任务数据，对后面数据
	 * 没有影响的话，就返回true，否则返回false。若返回false，则会直接从网络更新数据，这样可能会消耗更多的时间）**/
	boolean canBgUpdate(int taskId);
	
	/**通常需要根据之前的Task的结果值来更新新的Task的参数。
	 * 如果更新之后的参数仍然不完整，任务将失败。但是如果想配置为当参数不完整时忽略下一个任务的话，可以配置TaskConfig.canIrgnore参数。
	 * Note：即使不知道每个任务具体到底有多少参数，但是至少应该知道需要更新哪些参数。这里只需要在oldParam的基础上将需要更新的参数更新上去.
	 * 注意：所有的keys都已经在valueMap中就绪。**/
	void fetchParamValues(int taskId, Map<String, String> valueMap);
	
	/**@param taskName	任务的名称
	 * @param json		json实体对象
	 * @param bgTask	是否由后台任务更新（后台任务是指全部任务队列执行完之后再次执行的任务）。
	 * 注意：第二次更新可能发生在前台也可能发生在后台。取决于canBgUpdate()的返回值。<br/>
	 * 更新从网络或通用数据库表读取的数据。从网络读取的数据全部保存于一个通用数据库表，根据缓存配置，可能有的不保存。
	 * @return 返回成功还是失败的信息。如果成功则返回{@link #RESULT_OK}，失败返回{@link #RESULT_FAILURE}或自定义错误信息。
	 * 注意Task若失败将中断后面任务的执行，而没有忽略失败的选项，因为同一个Task对后面Task的影响视不同的Task列表而不同。**/
	<D> String update(int taskId, JsonBase<D> json, boolean bgTask);
	
	/**@param pageNo 		当前页的页码
	 * @param recordCount	总记录数
	 * @param hasMorePage	是否还有跟多页**/
	void updatePageInfo(int taskId, int pageNo, int recordCount, boolean hasMorePage);
}
